package com.mao;

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;

/**
 * Author: Administrator
 * Date: 2021/5/18 21:52
 * Description:
 */
//Redis的事务
public class TestTX {
    public static void main(String[] args) {
        //连接redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        //清空当前数据库
        jedis.flushDB();
//        //通过fastjson获取json字符串
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("hello","world");
//        jsonObject.put("name","kuangshen");
//
//        // 1.开启事务
//        Transaction multi = jedis.multi();
//        String result = jsonObject.toJSONString();
//
//        try {
//            //2.命令
//            multi.set("user1",result);
//            multi.set("user2",result);
//
//            //乐观锁（监控result）
//            jedis.watch("user1");
//            // 代码抛出异常事务，执行失败！
//            int i = 1/0 ;
//
//            // 3.执行事务！
//            multi.exec();
//        } catch (Exception e) {
//            multi.discard(); // 失败就放弃事务
//            e.printStackTrace();
//        } finally {
//            System.out.println(jedis.get("user1"));
//            System.out.println(jedis.get("user2"));
//            jedis.close(); // 关闭连接
//        }

        System.out.println("===========测试乐观锁==============");
        jedis.set("money","1000");
        jedis.set("out","0");
        try {
            jedis.watch("money");// 监视 money
            Transaction multi = jedis.multi();
            multi.decrBy("money",10); // money 减10
            multi.incrBy("out",10);// out加10
            Response<String> money = multi.get("money");
            Response<String> out = multi.get("out");
            multi.exec();
            System.out.println(money.get());
            System.out.println(out.get());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(jedis.get("money"));
            System.out.println(jedis.get("out"));
        } finally {
        }
        jedis.close();
    }
}
